/**
 * @group 通用工具
 * 从URL中获取指定参数的值
 *
 * @param url - 要解析的URL字符串
 * @param name - 要获取的参数名
 * @returns 参数值字符串，如果不存在则返回空字符串
 *
 * @example
 * ```ts
 * getParam('https://example.com?id=123&name=test', 'id') // '123'
 * getParam('https://example.com?id=123&name=test', 'name') // 'test'
 * getParam('https://example.com?id=123', 'age') // ''
 * ```
 */
export const getParam = (url: string, name: string): string => {
  if (!url || !name) return '';

  const reg = new RegExp(`(^|\\?|&)${name}=([^&]*)(&|$)`);
  const match = url.match(reg);

  return match ? decodeURIComponent(match[2]) : '';
};

/**
 * @group 数据操作
 * 使用递归扁平化嵌套数据
 *
 * @param list 列表（树形结构的数组）
 * @param childrenField 嵌套数据的字段名，默认为 'children'
 * @returns 扁平化后的数组
 *
 * @example
 * ```ts
 * const treeData = [
 *   { id: 1, name: '父节点1', children: [{ id: 2, name: '子节点1' }] },
 *   { id: 3, name: '父节点2', children: [] }
 * ];
 * getFlatMenuList(treeData);
 * // 结果: [
 * //   { id: 1, name: '父节点1', children: [...] },
 * //   { id: 2, name: '子节点1' },
 * //   { id: 3, name: '父节点2', children: [] }
 * // ]
 * ```
 */
export function getFlatMenuList(
  list: Record<string, any>[],
  childrenField: string = 'children'
): Record<string, any>[] {
  const newList: Record<string, any>[] = JSON.parse(JSON.stringify(list));
  return newList.flatMap((item) => [
    item,
    ...(item[childrenField] ? getFlatMenuList(item[childrenField], childrenField) : []),
  ]);
}
